package com.jiazhong.basic.pack0315.demo;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

// Map集合:HashMap  TreeMap  Hashtable Con...HashMap
// key:value
public class DemoF {

    // Map--->HashMap 线程不安全
    private static void a() {
        HashMap<String, String> map = new HashMap();
        // 存放
        map.put("A", "aa");
        map.put("B", "bb");
        map.put("C", "cc");
        System.out.println(map);
        // 存放时value可以重复，key不允许重复
        map.put("A", "aa2"); // 覆盖  修改
        map.put("D", "cc");
        System.out.println(map);
        // 获取
        String a = map.get("A");
        String e = map.get("E");
        System.out.println(a);
        System.out.println(e);
        // 删除
        map.remove("A");
        map.remove("C", "cc2");
        System.out.println(map);
        // 其他方法
        int size = map.size();
        System.out.println(size);
        Set<String> keys = map.keySet(); // key的集合
        Collection<String> values = map.values();// value的集合
        System.out.println(keys);
        System.out.println(values);
        boolean b1 = map.containsKey("A");
        boolean b2 = map.containsValue("cc2");
        System.out.println(b1);
        System.out.println(b2);
    }
    // Map--->TreeMap  红黑树结构
    private static void b() {
        TreeMap<String, String> map = new TreeMap();
        // 存放
        map.put("A", "aa");
        map.put("B", "bb");
        map.put("C", "cc");
        System.out.println(map);
        // 存放时value可以重复，key不允许重复
        map.put("A", "aa2"); // 覆盖  修改
        map.put("D", "cc");
        System.out.println(map);
        // 获取
        String a = map.get("A");
        String e = map.get("E");
        System.out.println(a);
        System.out.println(e);
        // 删除
        map.remove("A");
        map.remove("C", "cc2");
        System.out.println(map);
        // 其他方法
        int size = map.size();
        System.out.println(size);
        Set<String> keys = map.keySet(); // key的集合
        Collection<String> values = map.values();// value的集合
        System.out.println(keys);
        System.out.println(values);
        boolean b1 = map.containsKey("A");
        boolean b2 = map.containsValue("cc2");
        System.out.println(b1);
        System.out.println(b2);
    }

    // Map--->Hashtable 线程安全
    private static void c() {
        Hashtable<String, String> map = new Hashtable();
        // 存放
        map.put("A", "aa");
        map.put("B", "bb");
        map.put("C", "cc");
        System.out.println(map);
        // 存放时value可以重复，key不允许重复
        map.put("A", "aa2"); // 覆盖  修改
        map.put("D", "cc");
        System.out.println(map);
        // 获取
        String a = map.get("A");
        String e = map.get("E");
        System.out.println(a);
        System.out.println(e);
        // 删除
        map.remove("A");
        map.remove("C", "cc2");
        System.out.println(map);
        // 其他方法
        int size = map.size();
        System.out.println(size);
        Set<String> keys = map.keySet(); // key的集合
        Collection<String> values = map.values();// value的集合
        System.out.println(keys);
        System.out.println(values);
        boolean b1 = map.containsKey("A");
        boolean b2 = map.containsValue("cc2");
        System.out.println(b1);
        System.out.println(b2);
    }
    // Map--->ConcurrentHashMap  分段线程安全
    private static void d() {
        ConcurrentHashMap<String, String> map = new ConcurrentHashMap();
        // 存放
        map.put("A", "aa");
        map.put("B", "bb");
        map.put("C", "cc");
        System.out.println(map);
        // 存放时value可以重复，key不允许重复
        map.put("A", "aa2"); // 覆盖  修改
        map.put("D", "cc");
        System.out.println(map);
        // 获取
        String a = map.get("A");
        String e = map.get("E");
        System.out.println(a);
        System.out.println(e);
        // 删除
        map.remove("A");
        map.remove("C", "cc2");
        System.out.println(map);
        // 其他方法
        int size = map.size();
        System.out.println(size);
        Set<String> keys = map.keySet(); // key的集合
        Collection<String> values = map.values();// value的集合
        System.out.println(keys);
        System.out.println(values);
        boolean b1 = map.containsKey("A");
        boolean b2 = map.containsValue("cc2");
        System.out.println(b1);
        System.out.println(b2);
    }
    private static void e(){
        HashMap<String,String> map1 = new HashMap<>();
        Hashtable<String,String> map2 = new Hashtable<>();
        TreeMap<String,String> map3 = new TreeMap<>();
        ConcurrentHashMap<String,String> map4 = new ConcurrentHashMap<>();
        map1.put(null,null); // ✅
        // map2.put(null,""); // key和value都不能存放null
        map3.put("",null); // key 不能存放null value可以存放null
        map4.put(null,"");// key和value都不能存放null
    }
    public static void main(String[] args) {
        e();
    }
}
